package com.masita.ventanas;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;

import com.masita.logica.Ficha;
import com.masita.logica.Pedido;
import com.masita.util.Utilidad;


public class PanelPedidosPendientes extends JPanel implements InterfaceTabla{

	private VentanaPrincipal padre = null;
	
	private Vector pedidos;
	
	// PANEL SUPERIOR *************************************
	private JPanel panelTop = new JPanel();
	
	private JLabel etMostrarPedido = new JLabel("Mostrar Pedidos");
	private JComboBox lEstado = new JComboBox();
	private DefaultComboBoxModel mEstado = new DefaultComboBoxModel();
	
	private JButton bVerPedido = new JButton("Ver Pedido");
	private JButton bNuevoPedido = new JButton("Registrar Pedido");
	
	// PANEL TABLE ****************************************
	private JScrollPane scrollTabla = new JScrollPane();
	private TablaDatos tabla = new TablaDatos();

	public PanelPedidosPendientes(VentanaPrincipal p){
		super();
		this.padre = p;
		init();
	}
	
	private void init(){
		this.setLayout(new BorderLayout());
		this.cargarPanelTop();
		this.cargarPanelTabla();
		this.cargarPedidos(0);
		
		JPanel p = new JPanel();
		this.add(p,BorderLayout.EAST);
		p.setPreferredSize(new Dimension(50,20));

		p = new JPanel();
		this.add(p,BorderLayout.WEST);
		p.setPreferredSize(new Dimension(50,20));

		p = new JPanel();
		this.add(p,BorderLayout.SOUTH);
		p.setPreferredSize(new Dimension(50,50));
		
		// SETEOS DE LA TABLA *****************************
		tabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tabla.getSelectionModel().
				addListSelectionListener(new javax.swing.event.ListSelectionListener(){
			public void valueChanged(javax.swing.event.ListSelectionEvent e){
				habilitarBotones(tabla.getFilaSeleccionada());
			}
		});
	}
	
	public void cargarPanelTop(){
		this.add(panelTop,BorderLayout.NORTH);
		panelTop.setPreferredSize(new Dimension(530,40));
		
		panelTop.add(etMostrarPedido);
		etMostrarPedido.setPreferredSize(new Dimension(90,20));
		panelTop.add(lEstado);
		lEstado.setPreferredSize(new Dimension(100,20));
		mEstado.addElement(new String("PENDIENTES"));
		mEstado.addElement(new String("COMPRADOS"));
		lEstado.setModel(mEstado);
		lEstado.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				cargarPedidos(lEstado.getSelectedIndex());
			}
		});

		JPanel separador = new JPanel();
		this.panelTop.add(separador);
		separador.setPreferredSize(new Dimension(80,20));
	
		panelTop.add(bNuevoPedido);
		bNuevoPedido.setPreferredSize(new Dimension(120,20));
		bNuevoPedido.setMargin(new Insets(0,0,0,0));
		bNuevoPedido.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				nuevoPedido();
			}
		});

		separador = new JPanel();
		this.panelTop.add(separador);
		separador.setPreferredSize(new Dimension(50,20));
		
		panelTop.add(bVerPedido);
		bVerPedido.setPreferredSize(new Dimension(120,20));
		bVerPedido.setMargin(new Insets(0,0,0,0));
		bVerPedido.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				cargarFicha(tabla.getFilaSeleccionada());
			}
		});
		this.bVerPedido.setEnabled(false);
	}
	
	public void cargarPanelTabla(){
		this.add(scrollTabla,BorderLayout.CENTER);
		scrollTabla.getViewport().add(tabla);
		tabla.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

		Vector col = new Vector();
		col.addElement(new String("FECHA PEDIDO"));
		col.addElement(new String("CLIENTE"));
		col.addElement(new String("DNI"));
		col.addElement(new String("PRODUCTO"));
		col.addElement(new String("TALLE"));
		col.addElement(new String("CANTIDAD"));
		col.addElement(new String("ENTREGA"));
		col.addElement(new String("ESTADO"));
		
		this.tabla.cargarColumnas(col);
		int[] w = {100,200,80,300,60,80,80,100};
		this.tabla.setWitdhColumna(w,true);
	}
	
	private void cargarPedidos(int tipo){
		
		switch(tipo){
			case 0: // PEDIDOS PENDIENTES
				pedidos = Pedido.getPedidosPendientes();
				break;
			case 1: // PEDIDOS COMPRADOS
				pedidos = Pedido.getPedidoComprados();
				break;
			default:
				pedidos = new Vector();
		}

		Vector filas = new Vector();
		if( pedidos != null ){
			for(int i=0; i<pedidos.size(); i++){
				Vector fila = new Vector();
				Pedido p = (Pedido)pedidos.elementAt(i);
				Ficha ficha = Ficha.getFicha(p.getIdFicha());
				
				if( ficha.getCliente() == null || p.getProducto() == null ||
					p.getProducto().getTalle(p.getIdTalle()) == null ){
					VentanaMensaje ventana = new VentanaMensaje(padre,"ERROR","Se produjo un error "+												 "al tratar de cargar el pedido nro. '"+p.getIdPedido()+
												 "'. Se eliminara del sistema.",false);
					p.eliminar();
				}
				else{
					fila.addElement(Utilidad.getFechaFormato(p.getFechaPedido()));
					fila.addElement(ficha.getCliente().getNombre());
					fila.addElement(ficha.getCliente().getDni());
					fila.addElement(p.getProducto().getTexto());
					fila.addElement(p.getProducto().getTalle(p.getIdTalle()).getTalle());
					fila.addElement(String.valueOf(p.getCantidad()));
					fila.addElement(String.valueOf(p.getEntrega()));
					fila.addElement(p.getEstadoPedido());
					
					filas.addElement(fila);
				}
			}
		}		
		this.tabla.cargarDatos(filas);	
	}
	
	// HABILITAR LOS BOTONES
	private void habilitarBotones(int i){
		if( i > -1 && i < this.pedidos.size() )
			this.bVerPedido.setEnabled(true);
		else
			this.bVerPedido.setEnabled(false);
	}
	
	private void cargarFicha(int i){
		if( i < this.pedidos.size() && i > -1){
			Ficha f = Ficha.getFicha(((Pedido)this.pedidos.elementAt(i)).getIdFicha());
			if( f != null ){
				// ABRE LA VENTANA FICHAS PARA EL CASO DEL PAGO DE UNA CUOTA
				padre.VFichas(f,VentanaFichas.NUEVO_PEDIDO,
						((Pedido)this.pedidos.elementAt(i)).getIdPedido());
			}
		}
	}
	// ABRE LA VENTANA DE FICHAS SELECCIONANDO LA PALETA PEDIDOS
	private void nuevoPedido(){
		padre.VCargarFicha(VentanaFichas.NUEVO_PEDIDO,0);				
	}
	
	public Pedido getPedidoSeleccionado(){
		int i = this.tabla.getFilaSeleccionada();
		if( i < this.pedidos.size() && i > -1)
			return (Pedido)pedidos.elementAt(i);
		return null;		
	}
	
	/******************************************************
	 * TODO - VERIFICA SI SE MODIFICARON LOS ESTADOS DE LAS VENTAS
	 * LA VARIABLE ACTUALIZAR_VENTAS SE SETEA A TRUE CUANDO REGISTRO
	 * UNA VENTA EN LA VENTANA FICHAS, Y EL PANELVENTASPENDIENTES
	 * CHEQUEA LA VARIABLE CUANDO OBTIENE EL FOCO *********
	 *****************************************************/ 
	public void actualizarTabla(){
		this.cargarPedidos(lEstado.getSelectedIndex());
	}
	
	public TablaDatos getTabla(){
		return this.tabla;
	}

}
